// user-manage.js
const api = require('../../utils/api.js')
const permissionUtils = require('../../utils/permissions.js')

Page({
  data: {
    userList: [],
    searchKeyword: '',
    page: 1,
    limit: 20,
    hasMore: true,
    loading: false,
    
    // 编辑用户弹窗
    showEditModal: false,
    editingUser: {},
    statusOptions: ['正常', '锁定'],
    statusIndex: 0,
    
    // 修改密码弹窗
    showPasswordModal: false,
    newPassword: '',
    confirmPassword: ''
  },

  onLoad() {
    // 检查管理员登录状态
    const app = getApp()
    if (!app.checkAdminLogin()) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      wx.reLaunch({
        url: '/pages/login/login'
      })
      return
    }
    
    // 检查权限
    if (!this.hasPermission('user_manage', 'view')) {
      wx.showToast({
        title: '您没有用户管理权限',
        icon: 'none'
      })
      return
    }
    
    this.loadUserList()
  },

  // 加载用户列表
  loadUserList(isRefresh = false) {
    if (this.data.loading) return
    
    if (isRefresh) {
      this.setData({
        page: 1,
        userList: [],
        hasMore: true
      })
    }
    
    this.setData({ loading: true })
    
    const params = {
      page: this.data.page,
      limit: this.data.limit
    }
    
    if (this.data.searchKeyword) {
      params.keyword = this.data.searchKeyword
    }
    
    api.getUserList(params).then(res => {
      const newUsers = res.data.list || []
      
      this.setData({
        userList: [...this.data.userList, ...newUsers],
        hasMore: newUsers.length === this.data.limit,
        page: this.data.page + 1
      })
    }).catch(err => {
      console.error('加载用户列表失败:', err)
      wx.showToast({
        title: '加载失败',
        icon: 'error'
      })
    }).finally(() => {
      this.setData({ loading: false })
    })
  },

  // 搜索输入
  onSearchInput(e) {
    this.setData({
      searchKeyword: e.detail.value
    })
  },

  // 执行搜索
  onSearch() {
    this.loadUserList(true)
  },

  // 加载更多
  loadMore() {
    if (this.data.hasMore && !this.data.loading) {
      this.loadUserList()
    }
  },

  // 编辑用户
  onEditUser(e) {
    const user = e.currentTarget.dataset.user
    const statusIndex = user.status === 'normal' ? 0 : 1
    
    this.setData({
      showEditModal: true,
      editingUser: { ...user },
      statusIndex: statusIndex
    })
  },

  // 修改密码
  onChangePassword(e) {
    const user = e.currentTarget.dataset.user
    this.setData({
      showPasswordModal: true,
      editingUser: { ...user },
      newPassword: '',
      confirmPassword: ''
    })
  },

  // 删除用户
  onDeleteUser(e) {
    const user = e.currentTarget.dataset.user
    
    wx.showModal({
      title: '确认删除',
      content: `确定要删除用户"${user.username}"吗？此操作不可恢复！`,
      confirmText: '删除',
      confirmColor: '#ff4d4f',
      success: (res) => {
        if (res.confirm) {
          this.deleteUser(user.id)
        }
      }
    })
  },

  // 执行删除用户
  deleteUser(userId) {
    api.deleteUser(userId).then(res => {
      wx.showToast({
        title: '删除成功',
        icon: 'success'
      })
      // 重新加载列表
      this.loadUserList(true)
    }).catch(err => {
      console.error('删除用户失败:', err)
      wx.showToast({
        title: err.msg || '删除失败',
        icon: 'none'
      })
    })
  },

  // 昵称输入
  onNicknameInput(e) {
    this.setData({
      'editingUser.nickname': e.detail.value
    })
  },

  // 手机号输入
  onMobileInput(e) {
    this.setData({
      'editingUser.mobile': e.detail.value
    })
  },

  // 状态选择
  onStatusChange(e) {
    this.setData({
      statusIndex: e.detail.value
    })
  },

  // 保存用户信息
  onSaveUser() {
    const { editingUser, statusIndex } = this.data
    const status = statusIndex === 0 ? 'normal' : 'locked'
    
    const userData = {
      id: editingUser.id,
      nickname: editingUser.nickname,
      mobile: editingUser.mobile,
      status: status
    }
    
    api.updateUser(userData).then(res => {
      wx.showToast({
        title: '保存成功',
        icon: 'success'
      })
      this.onCloseModal()
      // 重新加载列表
      this.loadUserList(true)
    }).catch(err => {
      console.error('保存用户失败:', err)
      wx.showToast({
        title: err.msg || '保存失败',
        icon: 'none'
      })
    })
  },

  // 密码输入
  onPasswordInput(e) {
    this.setData({
      newPassword: e.detail.value
    })
  },

  // 确认密码输入
  onConfirmPasswordInput(e) {
    this.setData({
      confirmPassword: e.detail.value
    })
  },

  // 保存密码
  onSavePassword() {
    const { editingUser, newPassword, confirmPassword } = this.data
    
    if (!newPassword.trim()) {
      wx.showToast({
        title: '请输入新密码',
        icon: 'none'
      })
      return
    }
    
    if (newPassword !== confirmPassword) {
      wx.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
      })
      return
    }
    
    if (newPassword.length < 6) {
      wx.showToast({
        title: '密码长度不能少于6位',
        icon: 'none'
      })
      return
    }
    
    const passwordData = {
      id: editingUser.id,
      password: newPassword
    }
    
    api.changeUserPassword(passwordData).then(res => {
      wx.showToast({
        title: '密码修改成功',
        icon: 'success'
      })
      this.onCloseModal()
    }).catch(err => {
      console.error('修改密码失败:', err)
      wx.showToast({
        title: err.msg || '修改失败',
        icon: 'none'
      })
    })
  },

  // 关闭弹窗
  onCloseModal() {
    this.setData({
      showEditModal: false,
      showPasswordModal: false,
      editingUser: {},
      newPassword: '',
      confirmPassword: ''
    })
  },

  // 阻止事件冒泡
  stopPropagation() {
    // 阻止事件冒泡
  },

  // 权限检查方法
  hasPermission(module, action) {
    const app = getApp()
    const adminInfo = app.globalData.adminInfo
    if (!adminInfo) {
      return false
    }
    return permissionUtils.hasPermission(adminInfo.id, module, action)
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadUserList(true)
    wx.stopPullDownRefresh()
  },

  // 上拉加载更多
  onReachBottom() {
    this.loadMore()
  },

  // 头像加载错误处理
  onAvatarError(e) {
    const index = e.currentTarget.dataset.index;
    const userList = [...this.data.userList];
    // 将头像设置为空，这样会显示默认头像
    userList[index].avatar = '';
    this.setData({ userList });
  }
})
